<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       version="1.0"> 

<xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 
<xsl:variable name="codes" select="document('courses_codes.xml')"/> 
<xsl:key name="cgcodes" match="course_group" use="@code"/> 
<xsl:key name="coursesbygroup" match="course" use="course_group[parent::course/@acad_year = 2002 and parent::course/@term_id = 3]"/> 
<xsl:variable name="cgroups" select="/dce_courses/course[@acad_year = 2002 and @term_id = 3][generate-id()=generate-id(key('coursesbygroup',course_group)[1])]/course_group"/> 
<xsl:param name="toccolumns" select="'4'"/> 
<xsl:variable name="numincol" select="ceiling(count($cgroups) div $toccolumns)"/> 
<xsl:template match="/"> 
<xsl:message> 
 TOC Columns: <xsl:value-of select="$toccolumns"/> 
Course Groups: <xsl:value-of select="count($cgroups)"/> 
Num in Columns: <xsl:value-of select="$numincol"/> 
</xsl:message> 
 <html> 
  <head> 
   <title> 
   Harvard University Summer School Courses 2003 
   </title> 
   <link rel="stylesheet" type="text/css" href="courses.css"/> 
  </head> 
  <body> 
   <h1> 
    <a name="top">Harvard University Summer School Courses 2003</a> 
   </h1> 
   <!-- TOC --> 

   <!-- 
   <div class="toc"> 
   <ul> 
    <xsl:apply-templates select="$cgroups" mode="toc"> 
   <xsl:sort select="$codes/courses_codes/course_groups/course_group[@code = current()/text()]/@name"/> 
    </xsl:apply-templates> 
   </ul> 
   </div> 
--> 


   <table> 
   <tr> 
     <xsl:call-template name="toccell"> 
      <xsl:with-param name="startpos" select="1"/> 
     </xsl:call-template> 
   </tr> 
   </table> 

   <xsl:for-each select="$cgroups"> 
   <xsl:sort select="$codes/courses_codes/course_groups/course_group[@code = current()/text()]/@name"/> 
     <h2><a name="{text()}"> 
   <xsl:value-of select="$codes/courses_codes/course_groups/course_group[@code = current()/text()]/@name"/> 
    </a></h2> 
     <xsl:apply-templates select="key('coursesbygroup', current())"> 
      <xsl:sort select="title"/>        
     </xsl:apply-templates> 
       <xsl:call-template name="top"/>    
   </xsl:for-each>    
  </body> 
 </html> 
</xsl:template> 

<xsl:template name="toccell"> 
 <xsl:param name="startpos"/> 
 <td>     
 <div class="smalltoc"> 
  <ul>    
   <xsl:apply-templates select="$cgroups" mode="toc"> 
   <xsl:sort select="$codes/courses_codes/course_groups/course_group[@code = current()/text()]/@name"/>     
   <xsl:with-param name="startpos" select="$startpos"/> 
   </xsl:apply-templates> 
  </ul>     
 </div> 
 </td> 
 <xsl:if test="count($cgroups) &gt; $startpos + $numincol"> 
  <xsl:call-template name="toccell"> 
   <xsl:with-param name="startpos" select="$startpos + $numincol"/> 
  </xsl:call-template> 
 </xsl:if> 
</xsl:template> 
<xsl:template match="course_group" mode="toc"> 
 <xsl:param name="startpos"/> 
 <xsl:if test="position() &gt;= $startpos and position() &lt; $startpos + $numincol"> 
   <li> 
  <a> 
   <xsl:attribute name="href"> 
    <xsl:text>#</xsl:text> 
    <xsl:value-of select="."/> 
   </xsl:attribute> 
   <xsl:value-of select="$codes/courses_codes/course_groups/course_group[@code = current()/text()]/@name"/> 
  </a> 
 </li> 
</xsl:if> 
</xsl:template> 

<xsl:template match="course"> 
 <div class="course"> 
  <span class="course_gn"> 
   <xsl:value-of select="course_group"/> 
   <xsl:text> </xsl:text> 
   <xsl:value-of select="course_num"/> 
   <xsl:text>.  </xsl:text> 
  </span> 
  <span class="title"><xsl:value-of select="title"/></span> 
   <xsl:text> </xsl:text> 
   <span class="crn">(CRN: <xsl:value-of select="@crn"/>)</span> 
  </div> 
 <div class="course_head"> 
  <xsl:apply-templates select="course_head/person"/> 
 </div> 
</xsl:template> 

<xsl:template match="person[parent::course_head]"> 
 <div> 
  <span class="course_head_name"> 
   <xsl:value-of select="person_name"/> 
  </span> 
  <xsl:text>, </xsl:text> 
  <span class="course_head_title"> 
   <xsl:value-of select="person_title"/> 
  </span> 
 </div> 
</xsl:template> 

<xsl:template name="top"> 
 <hr/> 
 <div class="top"> 
  [ 
  <a href="#top"> 
   top 
  </a> 
  ] 
 </div> 
 <hr/> 
</xsl:template> 

<xsl:template match="text()"/> 

</xsl:stylesheet> 